﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include <string>
#include <vector>
using namespace std;

//template<typename Type>
//Type Max(const Type& a, const Type& b)
//{
//	cout << "This is Max<Type>" << endl;
//	return a > b ? a : b;
//}
//
//template<>
//int Max<int>(const int& a, const int& b)
//{
//	cout << "This is Max<int>" << endl;
//	return a > b ? a : b;
//}
//
//template<>
//char Max<char>(const char& a, const char& b)
//{
//	cout << "This is Max<char>" << endl;
//	return a > b ? a : b;
//}
//
//int Max(const int& a, const int& b)
//{
//	cout << "This is Max" << endl;
//	return a > b ? a : b;
//}
//int main()
//{
//	Max(10, 20);
//	Max(12.34, 23.45);
//	Max('A', 'B');
//	Max<int>(20, 30);
//	return 0;
//}

template<class T1, class T2>
class Data
{
public:
	Data() { cout << "Data<T1, T2>" << endl; }

private:
	T1 _d1;
	T2 _d2;
};

template <class T1>
class Data<T1, int>
{
public:
	Data() { cout << "Data<T1, int>" << endl; }

private:
	T1 _d1;
	int _d2;
};

template <typename T1, typename T2>
class Data <T1*, T2*>
{
public:
	Data() { cout << "Data<T1*, T2*>" << endl; }

private:
	T1 _d1;
	T2 _d2;
};

template <typename T1, typename T2>
class Data <T1&, T2&>
{
public:
	Data(const T1& d1, const T2& d2)
		: _d1(d1)
		, _d2(d2)
	{
		cout << "Data<T1&, T2&>" << endl;
	}

private:
	const T1& _d1;
	const T2& _d2;
};

int maxSubArray(int* nums, int numsSize)
{
	int sum = 0;//记录和
	int max = nums[0];//记录最大值
	int i = 0, j = 0;
	for (i = 0; i < numsSize; i++)
	{
		sum += nums[i];
		if (sum > max)
		{
			max = sum;
		}
		if (sum <= 0)//和小于0，直接丢弃
		{
			sum = 0;
		}
	}
	return max;
}

//int main()
//{
//	Data<double, int> d1;
//	Data<int, double> d2;
//	Data<int*, int*> d3;
//	Data<int&, int&> d4(1, 2);
//
//	return 0;
//}

//int main()
//{
//	int a = 0, b = 0, c = 0, d = 0;//a=A-B b=B-C c=A+B d=B+C
//	cin >> a >> b >> c >> d;
//	int A = 0, B = 0, C = 0;
//	for (A = 0; A <= 100; A++)
//	{
//		for (B = 0; B <= 100; B++)
//		{
//			if (A - B == a && A + B == c)
//			{
//				for (C = 0; C <= 100; C++)
//				{
//					if (B - C == b && B + C == d)
//					{
//						cout << A << " " << B << " " << C << endl;
//						return 0;
//					}
//				}
//			}
//		}
//	}
//	cout << "No" << endl;
//	return 0;
//}

int main()
{
	int a = 0, b = 0, c = 0, d = 0;//a=A-B b=B-C c=A+B d=B+C
	cin >> a >> b >> c >> d;
	int A = 0, B = 0, C = 0;
	if ((a + c) % 2 != 0 || (a + c) < 0)
	{
		cout << "No" << endl;
		return 0;
	}
	A = (a + c) / 2;
	if ((b + d) % 2 != 0 || (b + d) < 0)
	{
		cout << "No" << endl;
		return 0;
	}
	B = (b + d) / 2;
	if ((B - b) < 0)
	{
		cout << "No" << endl;
		return 0;
	}
	C = B - b;
	cout << A << " " << B << " " << C << endl;
	return 0;
}

//int main()
//{
//    int m = 0, n = 0;
//    cin >> m >> n;
//    if (m == 0)
//    {
//        cout << 0;
//        return 0;
//    }
//    string s;
//    //vector<char> v;
//    int flag = 1;//标记正负
//    if (m < 0)
//    {
//        flag = 0;
//        m = -m;
//    }
//    char a[] = { "0123456789ABCDEF" };
//    while (m)
//    {
//        int k = m % n;
//        s.push_back(a[k]);
//        //v.push_back(a[k]);
//        m = m / n;
//    }
//    if (flag == 0)
//    {
//        s.push_back('-');
//        //v.push_back('-');
//    }
//    //cout<<s<<endl;
//    auto it = s.rbegin();
//    while (it != s.rend())
//    {
//        cout << *it;
//        it++;
//    }
//    /*auto it=v.rbegin();
//    while(it!=v.rend())
//    {
//    cout<<*it;
//    it++;
//    }*/
//}
